<?php
/*
* author: Fabricio S Costa
* version: 1.0
* email: fabriciojf@gmail.com
*/
require_once('com/fabriciojf/persistence/PDOConnectionFactory.class.php');
require_once('com/fabriciojf/model/Historico.class.php');
require_once('com/fabriciojf/persistence/TicketDAO.class.php');


class HistoricoDAO extends PDOConnectionFactory {

    // irá receber uma conexão
    public $conex = null;

    // constructor
    public function HistoricoDAO(){}


    // realiza uma inserção
    public function save($historico){

        try{
            //instancia a conexao
            $this->conex = PDOConnectionFactory::getConnection();

            // executa a query
            $stmt = $this->conex->prepare("INSERT INTO historico
            (mensagem,dataHora,idTicket,idUsuario) VALUES (?,?,?,?)");

            // valores encapsulados nas variáveis da classe Agenda.
            // sequencia de índices que representa cada valor de minha query
            $stmt->bindValue(1, $historico->getMensagem());
            $stmt->bindValue(2, $historico->getDataHora());
            $stmt->bindValue(3, $historico->getTicket()->getId());
            $stmt->bindValue(4, $historico->getUsuario()->getId());

            // executo a query preparada
            $stmt->execute();

            // fecho a conexão
            $this->conex = null;

            // caso ocorra um erro, retorna o erro;
        }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); }
    }


    // realiza uma inserção
    public function update($historico){

        try{
            //instancia a conexao
            $this->conex = PDOConnectionFactory::getConnection();

            // executa a query
            $stmt = $this->conex->prepare("UPDATE historico SET mensagem=?,dataHora=?,idTicket=?,idUsuario=? WHERE id=?");
            // valores encapsulados nas variáveis da classe Agenda.
            // sequencia de índices que representa cada valor de minha query
            $stmt->bindValue(1, $historico->getMensagem());
            $stmt->bindValue(2, $historico->getDataHora());
            $stmt->bindValue(3, $historico->getTicket()->getId());
            $stmt->bindValue(4, $historico->getId());
            $stmt->bindValue(5, $historico->getUsuario()->getId());

            // executo a query preparada
            $stmt->execute();

            // fecho a conexão
            $this->conex = null;

            // caso ocorra um erro, retorna o erro;
        }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); }
    }


    // remove um registro
    public function remove( $id ){

        try{
            //instancia a conexao
            $this->conex = PDOConnectionFactory::getConnection();

            // executo a query
            $num = $this->conex->exec("DELETE FROM historico WHERE id=$id");

            // caso seja execuado ele retorna o número de rows que foram afetadas.
            if( $num >= 1 ){ return $num; } else { return 0; }
            // caso ocorra um erro, retorna o erro;

        }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); }

    }


    // realiza uma listagem
    public function listAll(){

        try{
            //instancia a conexao
            $this->conex = PDOConnectionFactory::getConnection();

            $list = array();
            $ticketDao = new TicketDao();

            // executo a query
            $stmt = $this->conex->query("SELECT * FROM historico");

            // desconecta
            $this->conex = null;

            if ($stmt) {
                $rows = $stmt->fetchAll();
                $i = 0;
                foreach ($rows as $rs) {
                    $list[$i] = new Historico();
                    $list[$i]->setId($rs['id']);
                    $list[$i]->setMensagem($rs['mensagem']);
                    $list[$i]->setDataHora($rs['dataHora']);
                    $list[$i]->setTicket(Dao::findForId($rs['idTicket'],'Ticket'));
                    $list[$i]->setUsuario(Dao::findForId($rs['idUsuario'],'Usuario'));
                    $i++;
                }
            }

            return $list;
        }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); exit;}
    }

    public function findForId($id){

        try{
            //instancia a conexao
            $this->conex = PDOConnectionFactory::getConnection();

            $historico = new Historico();
            $ticketDao = new TicketDao();

            // executo a query
            $stmt = $this->conex->query("SELECT * FROM historico WHERE id=$id");

            // desconecta
            $this->conex = null;

            if ($stmt) {
                $rows = $stmt->fetchAll();
                foreach ($rows as $rs) {
                    $historico->setId($rs['id']);
                    $historico->setMensagem($rs['mensagem']);
                    $historico->setDataHora($rs['dataHora']);
                    $historico->setTicket(Dao::findForId($rs['idTicket'],'Ticket'));
                    $historico->setUsuario(Dao::findForId($rs['idTicket'],'Usuario'));
                }
            }

            return $historico;
        }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); exit;}
    }


    public function findForTicket($idTicket) {

        try{
            //instancia a conexao
            $this->conex = PDOConnectionFactory::getConnection();

            $list = array();
            $ticketDao = new TicketDao();

            // executo a query
            $stmt = $this->conex->query("SELECT * FROM historico WHERE idTicket = $idTicket ORDER BY dataHora desc");

            // desconecta
            $this->conex = null;
            if ($stmt) {
                $rows = $stmt->fetchAll();
                $i = 0;
                foreach ($rows as $rs) {
                    $list[$i] = new Historico();
                    $list[$i]->setId($rs['id']);
                    $list[$i]->setMensagem($rs['mensagem']);
                    $list[$i]->setDataHora($rs['dataHora']);
                    $list[$i]->setTicket(Dao::findForId($rs['idTicket'],'Ticket'));
                    $list[$i]->setUsuario(Dao::findForId($rs['idUsuario'],'Usuario'));
                    $i++;
                }
            }

            return $list;
        }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); exit;}
    }

}
?>

                            